iT邦幫忙

2022 iThome 鐵人賽

DAY 21
0
Software Development

你知道Go是什麼嗎?系列 第 21

Day21 - NoSQL - Golang

  • 分享至 

  • xImage
  •  

昨天介紹了SQL,今天就介紹個對立面的NoSQL

NoSQL

NoSQLNon SQLNot Only SQL的縮寫,是一種非關聯式資料庫,和昨天介紹的不同是,NoSQL資料庫是一種非關聯式資料庫,將資料儲存為類似JSON的文件,並對資料進行查詢。

特色

  • 彈性:NoSQL資料庫整體而言提供促進更快速及更能反覆開發的彈性結構描述。
  • 可擴展性:NoSQL資料庫一般的設計都能透過硬體的分散式叢集來向外擴展,而不必藉由增加昂貴和重量級的伺服器來進行垂直擴展。
  • 高效能:NoSQL資料庫針對特定資料模型加以優化,並且存取比使用關聯式資料庫達到相同功能的更高效能模式。
  • 高功能性:NoSQL資料庫提供專為各別資料模型而建造的高功能API和資料。

比較

關聯式資料庫、SQL 非關聯式資料庫、NoSQL
特色 具有邏輯和特定需求的關聯式資料 大型、不相關、不定或快速變化的資料
專為關聯式結構所建置的舊版系統 效能和可用性比強式一致性更重要的應用程式
需要複雜查詢或多列交易的應用程式 服務世界各地使用者的 Always-on 應用程式
-
案例 會計、財務和銀行系統 行動應用程式
庫存管理系統 即時分析系統
交易管理系統 內容管理系統

MongoDB

MongoDB是一個開源(open source)的文件資料庫,擁有高靈活性、高可用性及可擴展性,是一種基於文檔的分散式資料庫。是NoSQL中最多人使用的資料庫系統。

使用

有兩種驅動方式分別是mgomongo-go-driver,各種比較看起來mgo比較容易上手,但現在已經不維護了,因此使用Go官方提供的mongo-driver

安裝

go get go.mongodb.org/mongo-driver/mongo

連線

package main

import (
	"fmt"
	"log"
    "context"
	"go.mongodb.org/mongo-driver/mongo"
	"go.mongodb.org/mongo-driver/mongo/options"
)

func main() {
	ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
	defer cancel()
	client, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017"))
	if err!= nil{
		log.Fatal(err)
	}
}

Insert

import一個bson套件

import (
	"go.mongodb.org/mongo-driver/bson"
)

選擇要使用的DatabaseCollection,這會先在MongoDB內建立

collection := client.Database("test").Collection("UserInfo")
res, err := collection.InsertOne(ctx, bson.D{{"name", "pi"}, {"value", 3.14159}})

成功插入資料

Query

collection := client.Database("test").Collection("UserInfo")
	cur, err := collection.Find(ctx, bson.D{})
	if err != nil {
		log.Fatal(err)
	}
	defer cur.Close(ctx)
	for cur.Next(ctx) {
		var result bson.M

		err := cur.Decode(&result)
		if err != nil {
			log.Fatal(err)
		}
		fmt.Printf("%+v\n", result)
	}

output:

map[_id:ObjectID("633e6dc269592c53c3fc8fde") name:pi value:3.14159]
map[_id:ObjectID("633e74c57d82deaff3852e28") name:e value:2.71818]


MongoDB是第一次使用,如預期的一樣很不熟,之後如果有更深的瞭解再回來修正這篇文ˊˇˋ

參考資料

NoSQL 資料庫 - 什麼是 NoSQL?
https://azure.microsoft.com/zh-tw/resources/cloud-computing-dictionary/what-is-nosql-database/

什麼是SQL?什麼是NOSQL? 用簡單範例看一下他們的差異
https://www.codegym.tech/blog/sql-vs-nosql

什麼是 NoSQL?
https://aws.amazon.com/tw/nosql/

MongoDB Go Driver使用帮助文档
https://mongoing.com/archives/27257

mgo和mongo-go-driver使用心得比較
https://www.gushiciku.cn/pl/25Qw/zh-tw


上一篇
Day20 - MySQL - Golang
下一篇
Day22 - Redis - Golang
系列文
你知道Go是什麼嗎?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言